package com.link.base.base.consumer.service;

import com.link.base.base.accnt.model.Account;
import com.link.base.base.consumer.model.QidianAccntWeixin;
import com.link.base.wechat.wxplatform.model.WxPlatform;
import com.link.base.wechat.wxsubscriber.model.Subscriber;
import com.link.core.basic.service.BasicService;

import java.util.List;

/**
 * 微信消费者相关服务
 * @author Li Yang
 */
public interface WxConsumerService extends BasicService<Subscriber> {

    /**
     * 更新插入粉丝
     *
     * @param record
     */
    int insertOrUpdateSub(Subscriber record) throws Exception;

    /**
     * 根据weixin_og_id查询其所属帐套
     *
     * @param record
     */
    WxPlatform queryCorpByWxAppOrOgId(WxPlatform record) throws Exception;

    /**
     * 根据微信粉丝生成消费者
     *
     * @param sub
     * @param subList
     * @param corpAdminId
     */
    List<Account> generateWxSub2Consumer(Subscriber sub, List<Subscriber> subList, Long corpAdminId) throws Exception;

    /**
     * 根据wx_og_id查询公众号下所有粉丝
     *
     * @param record
     */
    List<Subscriber> queryAllSubByOg(Subscriber record) throws Exception;

    /**
     * 取消（修改）粉丝列表粉丝的关注状态
     *
     * @param record
     */
    void wxUpdateUnsubscribe(Subscriber record) throws Exception;

    /**
     * 解除微信公众号绑定
     *
     * @author ouyangzhenqiang
     * @date 2019/03/18 18:15
     * @param record 公众号记录
     */
    void unbindWxPlatform(WxPlatform record) throws Exception;

    /**
     * 微信公众号自动同步粉丝开启/关闭，若为开启则会触发粉丝数据同步
     *
     * @param record
     */
    void wxAutoTransStatusUpdate(WxPlatform record) throws Exception;

    /**
     * 获取微信订阅者信息
     *
     * @author LiQun
     * @param authorizerAppId 微信授权id
     * @param custermname     客户openId
     * @param wxInfo          微信平台信息
     */
    Subscriber getSubscriberInfo(String authorizerAppId, String custermname, WxPlatform wxInfo) throws Exception;

    /**
     * 基于wxSubscriberService生成的微信用户，补充性别、公众平台信息
     *
     * @author ouyangzhenqiang
     * @date 2019/03/01 19:48
     * @param subscriber      消费者对象
     * @param wxInfo          微信平台信息
     */
    Subscriber parseSubscriberInfo(Subscriber subscriber, WxPlatform wxInfo) throws Exception;

    /**
     * 给微信/客户中间表插入记录
     *
     * @author LiQun
     * @date 上午10:56 2018/5/22
     * @param record 微信客户中间表
     */
    int insertOrUpdateAccountWeixin(QidianAccntWeixin record) throws Exception;

    /**
     * 更新客户唯一标识8位数字
     *
     * @author LiQun
     * @date 上午11:04 2018/5/22
     * @param account 客户
     */
    void wx2codeUpdate(Account account) throws Exception;

    /**
     * 将微信信息缓存在redis中
     *
     * @author LiQun
     * @date 上午11:21 2018/5/22
     * @param sswWs 微信关注者信息
     */
    void uploadWxOnRedis(Subscriber sswWs) throws Exception;

    /**
     * 根据客户openId及corpId查询客户信息
     *
     * @author LiQun
     * @date 下午2:32 2018/5/22
     * @param account 客户
     */
    Account queryAccountByOpenId(Account account) throws Exception;

    /**
     * 更新客户表ACCNT_2D_SEQ的值
     *
     * @param account
     */
    void updateWx2code(Account account);

    /**
     * 从redis中下载微信关注者信息
     *
     * @author LiQun
     * @date 2018/10/25
     * @param accntSeq
     */
    Subscriber downloadWxOnRedis(String accntSeq) throws Exception;
}
